package top.infopub.mgr.bpa.dao;


import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import top.infopub.generic.GenericDao;
import top.infopub.mgr.bpa.domain.ProContractDomain;
import top.infopub.mgr.bpa.vo.ProContractVo;
import top.infopub.mgr.bpast.domain.BpastContractDomain;
import top.infopub.model.bpa.ProContract;

import com.github.pagehelper.Page;


/** 对外项目合同(BPA_PRO_CONTRACT) **/
public interface ProContractDao extends GenericDao<ProContract, String> {

    /**
     * 根据条件查询对外项目合同记录
     * @param ProContractVo
     * @return 
     * @see
     */
    Page<ProContractDomain> selectByDomainWhere(ProContractVo proContractVo);

    /**
     * 根据条件查询对外项目合同记录--我审批的列表
     * @param ProContractVo
     * @return 
     * @see
     */
    Page<ProContractDomain> selectMyCheckByDomainWhere(ProContractVo proContractVo);

    /**
     * 添加-项目合同
     */
    void insertById(ProContract proContract);

    /**
     * 根据项目合同名称判断是否存在
     */
    List<ProContract> isExistContractName(@Param("contractName") String contractName,
                                    @Param("proCode") String proCode);

    /**
     * 查询项目合同信息 并且项目没有发起过继承协议
     */
    List<ProContract> selectAllUsableProContract(@Param("id") String ids,
                                                 @Param("proCode") String proCode,
                                                 @Param("visibleProCodes") String visibleProCodes);

    /**
     * 查询项目合同信息
     */
    List<ProContract> selectProContracts(@Param("id") String ids, @Param("proCode") String proCode);

    /**
     * 根据项目编号，查询项目合同信息
     */
    ProContractDomain selectByContractProCode(@Param("proCode") String proCode);

    /**
     * 根据合同签订日期 判断是否为  补充签订
     */
    ProContract selectContractSignDate();

    /**
     * 查询项目合同信息(其他费合同)
     */
    List<ProContract> selectAllContracts(@Param("id") String ids,
                                         @Param("proCode") String proCode,
                                         @Param("visibleProCodes") String visibleProCodes);

    /**
     * 根据项目合同id查询信息(详情页)
     */
    ProContractVo queryById(String id);

    /**
     * 根据条件查询商务驾驶舱-项目合同分页记录
     * @param where
     * @return 
     * @see
     */
    Page<BpastContractDomain> selectBpastByDomainWhere(Map<String, Object> where);

    /**
     * 判断项目名称是否存在
     */
    ProContract isExistProName(String proCode);

}